package controller;

import java.util.ArrayList;
import java.util.List;

import javaUtils.DateUtil;
import model.CajaDiaria;
import beans.CajaDiariaBean;
import dao.HibernateCajaDiariaDAO;
import dto.CajaDiariaDTO;

public class AdministradorCajaDiaria {
	private static AdministradorCajaDiaria instancia;

	public AdministradorCajaDiaria() {

	}

	public static AdministradorCajaDiaria getInstancia() {
		if (instancia == null)
			instancia = new AdministradorCajaDiaria();
		return instancia;
	}

	public void merge(CajaDiaria caja) { // TODO
		// CajaDiariaBean cajaBean=fromModelTOBean(caja);

	}

	public List<CajaDiariaBean> fromModelTOBean(List<CajaDiaria> cajas) {
		List<CajaDiariaBean> cajasBean = new ArrayList<CajaDiariaBean>();
		for (CajaDiaria cajaDiaria : cajas) {
			CajaDiariaBean cajaBean = fromModelTOBean(cajaDiaria);
			cajasBean.add(cajaBean);
		}
		return cajasBean;
	}

	public CajaDiariaBean fromModelTOBean(CajaDiaria caja) {
		CajaDiariaBean cajaBean = null;
		if (caja != null) {
			cajaBean = new CajaDiariaBean();
			cajaBean.setIdCajaDiaria(caja.getId());
			cajaBean.setEfectivoTotal(AdministradorItemBillete.getInstancia()
					.fromModelTOBean(caja.getEfectivoTotal()));
			cajaBean.setEstado(caja.getEstado());
			cajaBean.setFacturas(AdministradorFactura.getInstancia()
					.fromModelToBean(caja.getFacturas()));
			cajaBean.setTotal(caja.getTotal());
			cajaBean.setFecha(caja.getFecha());
			cajaBean.setHoraCierre(caja.getHoraCierre());
			cajaBean.setTicketsTotal(AdministradorTicket.getInstancia().fromModelTOBean(caja.getTicketsTotal()));
			cajaBean.setPagos(AdministradorPago.getInstancia().fromModelTOBean(
					caja.getPagos()));
		}
		return cajaBean;
	}

	public List<CajaDiaria> fromDTOTOModel(List<CajaDiariaDTO> cajasDTO) {
		List<CajaDiaria> cajas = new ArrayList<CajaDiaria>();
		for (CajaDiariaDTO cajaDiariaDTO : cajasDTO) {
			CajaDiaria caja = fromDTOTOModel(cajaDiariaDTO);
			cajas.add(caja);
		}
		return cajas;
	}

	public CajaDiaria fromDTOTOModel(CajaDiariaDTO cajaDiariaDTO) {
		CajaDiaria caja = null;
		if (cajaDiariaDTO != null) {
			caja = new CajaDiaria();
			caja.setId(cajaDiariaDTO.getId());
			caja.setEfectivoTotal(AdministradorItemBillete.getInstancia()
					.fromDTOTOModel(cajaDiariaDTO.getEfectivoTotal()));
			caja.setEstado(cajaDiariaDTO.getEstado());
			caja.setTicketsTotal(AdministradorTicket.getInstancia().fromDTOTOModel(cajaDiariaDTO.getTicketsTotal()));
			caja.setFacturas(AdministradorFactura.getInstancia()
					.fromDTOTOModel(cajaDiariaDTO.getFacturas()));
			caja.setTotal(cajaDiariaDTO.getTotal());
			caja.setFecha(cajaDiariaDTO.getFecha());
			caja.setHoraCierre(cajaDiariaDTO.getHoraCierre());
			caja.setPagos(AdministradorPago.getInstancia().fromDTOTOModel(cajaDiariaDTO.getPagos()));
		}
		return caja;
	}
	
	public List<CajaDiariaDTO> fromModelTODTO(List<CajaDiaria> cajas) {
		List<CajaDiariaDTO> cajasDTO = new ArrayList<CajaDiariaDTO>();
		for (CajaDiaria cajaDiaria : cajas) {
			CajaDiariaDTO cajaDTO = fromModelTODTO(cajaDiaria);
			cajasDTO.add(cajaDTO);
		}
		return cajasDTO;
	}
	
	public CajaDiariaDTO fromModelTODTO(CajaDiaria cajaDiaria) {
		CajaDiariaDTO cajaDTO = null;
		if (cajaDiaria!= null) {
			cajaDTO = new CajaDiariaDTO();
			cajaDTO.setId(cajaDiaria.getId());
			cajaDTO.setEfectivoTotal(AdministradorItemBillete.getInstancia()
					.fromModelTODTO(cajaDiaria.getEfectivoTotal()));
			cajaDTO.setEstado(cajaDiaria.getEstado());
			cajaDTO.setTicketsTotal(AdministradorTicket.getInstancia().fromModelTODTO(cajaDiaria.getTicketsTotal()));
			cajaDTO.setFacturas(AdministradorFactura.getInstancia()
					.fromModelTODTO(cajaDiaria.getFacturas()));
			cajaDTO.setTotal(cajaDiaria.getTotal());
			cajaDTO.setFecha(cajaDiaria.getFecha());
			cajaDTO.setHoraCierre(cajaDiaria.getHoraCierre());
			cajaDTO.setPagos(AdministradorPago.getInstancia().fromModelTODTO(cajaDiaria.getPagos()));
		}
		return cajaDTO;
	}

	public List<CajaDiaria> fromBeanTOModel(List<CajaDiariaBean> cajasBean) {
		List<CajaDiaria> cajas = new ArrayList<CajaDiaria>();
		for (CajaDiariaBean cajaDiariaBean : cajasBean) {
			CajaDiaria caja = fromBeanTOModel(cajaDiariaBean);
			cajas.add(caja);
		}
		return cajas;
	}

	public CajaDiaria fromBeanTOModel(CajaDiariaBean cajaDiariaBean) {
		CajaDiaria caja = null;
		if (cajaDiariaBean != null) {
			caja = new CajaDiaria();
			caja.setId(cajaDiariaBean.getIdCajaDiaria());
			caja.setEfectivoTotal(AdministradorItemBillete.getInstancia()
					.fromBeanTOModel(cajaDiariaBean.getEfectivoTotal()));
			caja.setEstado(cajaDiariaBean.getEstado());
			caja.setTicketsTotal(AdministradorTicket.getInstancia().fromBeanTOModel(cajaDiariaBean.getTicketsTotal()));
			caja.setFacturas(AdministradorFactura.getInstancia()
					.fromBeanTOModel(cajaDiariaBean.getFacturas()));
			caja.setFecha(cajaDiariaBean.getFecha());
			caja.setHoraCierre(cajaDiariaBean.getHoraCierre());
			caja.setTotal(cajaDiariaBean.getTotal());
			caja.setPagos(AdministradorPago.getInstancia().fromBeanTOModel(
					cajaDiariaBean.getPagos()));
		}
		return caja;
	}

	public CajaDiaria getCajaDelDia() {
		String fechaHoy=DateUtil.getInstancia().getDiaActualString();
		CajaDiariaBean caja=HibernateCajaDiariaDAO.getInstancia().getCajaDelDia(fechaHoy);
		return this.fromBeanTOModel(caja);
		
	}

	public CajaDiaria buscarCajaDiaria(CajaDiaria caja) {
		CajaDiariaBean ab=fromModelTOBean(caja);
		ab=HibernateCajaDiariaDAO.getInstancia().buscarCajaDiaria(ab);
		return fromBeanTOModel(ab);
	}

	public void updateCajaDiaria(CajaDiaria cajaDiaria) {
		CajaDiariaBean ab=fromModelTOBean(cajaDiaria);
		HibernateCajaDiariaDAO.getInstancia().update(ab);
		
	}

}